package com.xunhang.utils;

import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import com.xunhang.entity.News;


public class HtmlParser {

    /**
     * 从列表页单个新闻条目中提取基本信息
     */
    public static News parseNewsItem(Element liItem) {
        News news = new News();
        String baseUrl = "https://news.whu.edu.cn";
        try {
            // 1. 提取标题和详情页链接
            Element link = liItem.selectFirst("a.alin_r");
            if (link != null) {
                // 使用title属性获取完整标题
                news.setTitle(link.attr("title"));

                // 修复URL处理
                String detailUrl = liItem.select("a").attr("href");
                if (detailUrl.startsWith("../")) {
                    detailUrl = "https://news.whu.edu.cn" + detailUrl.substring(2);
                } else if (!detailUrl.startsWith("http")) {
                    detailUrl = "https://news.whu.edu.cn" + (detailUrl.startsWith("/") ? "" : "/") + detailUrl;
                }

                // 修正包含 /../ 的URL
                if (detailUrl.contains("/../")) {
                    detailUrl = detailUrl.replace("/../", "/");
                }

                news.setDetailUrl(detailUrl);
            }

            // 2. 提取封面图片
            Element img = liItem.selectFirst(".imgBox img");
            if (img != null) {
                String imgUrl = img.attr("src");
                if (imgUrl.startsWith("/__local/")) {
                    imgUrl = baseUrl + imgUrl;
                }
                news.setImages(imgUrl); // 先存储封面图
            }

        } catch (Exception e) {
            System.err.println("解析新闻条目出错: " + e.getMessage());
        }
        return news;
    }

    /**
     * 从详情页提取正文内容和所有图片
     */
    public static void parseNewsDetail(Document detailDoc, News news) {
        try {
            // 提取正文内容
            Element contentElement = detailDoc.selectFirst("div.v_news_content");

            if (contentElement != null) {
                //0.提取浏览量和发布时间
                Element infoElement = detailDoc.selectFirst("div.arc-info div");
                if (infoElement != null) {
                    // 提取发布时间并解析为 LocalDateTime
                    Element dateElement = infoElement.selectFirst("span:contains(发布时间)");
                    if (dateElement != null) {
                        String dateStr = dateElement.text().replace("发布时间：", "").trim();

                        // 定义日期格式（根据你的实际格式调整）
                        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
                        LocalDateTime publishTime = LocalDateTime.parse(dateStr, formatter);
                        news.setSubmitTime(publishTime);
                        System.out.println("发布时间 (LocalDateTime): " + publishTime);
                    }
                }
                // 1. 移除不需要的元素
                contentElement.select("p.vsbcontent_img, script, style, img").remove();

                // 2. 提取作者信息（从vsbcontent_end段落）
                Element authorElement = contentElement.select("p.vsbcontent_end").stream()
                        .filter(p -> p.text().contains("编辑："))
                        .findFirst()
                        .orElse(null);
                if (authorElement != null) {
                    String authorText = authorElement.text();
                    // 提取"编辑：XXX"格式的作者信息
                    if (authorText.contains("编辑：") || authorText.contains("本网编辑：")) {
                        // 统一处理 "编辑：" 或 "本网编辑：" 的情况
                        int editIndex = authorText.indexOf("编辑：");
                        if (editIndex == -1) {
                            editIndex = authorText.indexOf("本网编辑：");
                        }

                        // 提取作者部分，并去除首尾空格
                        String author = authorText.substring(editIndex + 3).trim(); // "编辑：" 和 "本网编辑：" 都取 ": " 后的部分

                        // 去除可能存在的右括号（全角/半角）
                        author = author.replaceAll("[）)]+$", "");

                        // 再次 trim 确保没有多余空格
                        author = author.trim();

                        if (!author.isEmpty()) {
                            news.setAuthor(author);
                            System.out.println("[DEBUG] 提取到作者: " + author);
                        } else {
                            System.out.println("[DEBUG] 提取作者失败，格式可能不正确: " + authorText);
                        }
                    }
                    // 移除作者段落，避免出现在正文中
                    authorElement.remove();
                }

                // 3. 构建完整文本内容
                StringBuilder fullText = new StringBuilder();
                for (Element p : contentElement.select("p")) {
                    String text = p.text().trim();

                    if (!text.isEmpty()) {
                        // 处理引号格式
                        text = text.replace("“", "\"")
                                .replace("”", "\"");

                        fullText.append(text).append("\n\n");
                    }
                }

                // 4. 最终清理（合并空行、去除首尾空白）
                String result = fullText.toString()
                        .replaceAll("\\n{3,}", "\n\n")
                        .trim();

                news.setDetail(result);
                System.out.println("[DEBUG] 完整新闻正文:\n" + result);

                // 图片提取逻辑保持不变...
                Elements imgs = contentElement.select("img[src], img[data-src]");
                List<String> imageUrls = new ArrayList<>();

                if (news.getImages() != null && !news.getImages().isEmpty()) {
                    imageUrls.add(news.getImages());
                }

                for (Element img : imgs) {
                    String imgUrl = img.absUrl("src");
                    if (imgUrl.contains("/__local/")) {
                        imgUrl = "https://news.whu.edu.cn" + imgUrl.substring(imgUrl.indexOf("/__local/"));
                    }
                    if (!imgUrl.isEmpty() && !imageUrls.contains(imgUrl)) {
                        imageUrls.add(imgUrl);
                    }
                }

                if (!imageUrls.isEmpty()) {
                    news.setImages(String.join(",", imageUrls));
                }
            } else {
                news.setDetail(detailDoc.body().html());
                System.out.println("警告：使用完整页面作为内容");
            }
        } catch (Exception e) {
            System.err.println("解析详情页出错: " + e.getMessage());
            e.printStackTrace();
        }
    }
}